﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using AccesoData.Interfaces;
using Entidades;
using MySql.Data.MySqlClient;

namespace AccesoData.DAOMySql
{
    public class DAORecaudoInspeccionMySql: ConexionBaseDatos, IDAORecaudoInspeccion
    {
        /// <summary>
        /// asigna recaudo en a un inspeccion con sus datos requeridos
        /// </summary>
        /// <param name="recaudo"></param>
        /// <param name="inspeccion"></param>
        /// <returns></returns>
        public int AgregarRecaudoInspeccion(RecaudoInspeccion recaudo, Entidad inspeccion)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "AgregarRecaudoInspeccion";


                comando.Parameters.AddWithValue("@idInspeccion",inspeccion.Id );
                comando.Parameters.AddWithValue("@idRecaudo",recaudo.Recaudo.Id);
                comando.Parameters.AddWithValue("@fechaSolicitud",recaudo.FechaSolicitud);
                comando.Parameters.AddWithValue("@fechaEntregado", recaudo.FechaEntregado);
                comando.Parameters.AddWithValue("@observacion", recaudo.Observacion);

                comando.Parameters["@idInspeccion"].Direction = ParameterDirection.Input;
                comando.Parameters["@idRecaudo"].Direction = ParameterDirection.Input;
                comando.Parameters["@fechaSolicitud"].Direction = ParameterDirection.Input;
                comando.Parameters["@fechaEntregado"].Direction = ParameterDirection.Input;
                comando.Parameters["@observacion"].Direction = ParameterDirection.Input;

                int id = 0;
                MySqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    id = (reader[0] == DBNull.Value) ? 0 : (int)reader[0];
                }

                CerrarConexion();
                return id;
            }
            catch (Exception)
            {

                return -1;
            }
        }

        /// <summary>
        /// edita los datos de los recaudos de una inspeccion
        /// </summary>
        /// <param name="recaudoInspeccion"></param>
        /// <returns></returns>
        public bool EditarRecaudoInspeccion(RecaudoInspeccion recaudoInspeccion)
        {
            try
            {

                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "EditarRecaudoInspeccion";


                comando.Parameters.AddWithValue("@idRecaudoInspeccion", recaudoInspeccion.Id);
                comando.Parameters.AddWithValue("@fechaSolicitud", recaudoInspeccion.FechaSolicitud);
                comando.Parameters.AddWithValue("@fechaEntregado", recaudoInspeccion.FechaEntregado);
                comando.Parameters.AddWithValue("@observacionNueva", recaudoInspeccion.Observacion);

                comando.Parameters["@idRecaudoInspeccion"].Direction = ParameterDirection.Input;
                comando.Parameters["@fechaSolicitud"].Direction = ParameterDirection.Input;
                comando.Parameters["@fechaEntregado"].Direction = ParameterDirection.Input;
                comando.Parameters["@observacionNueva"].Direction = ParameterDirection.Input;

                comando.ExecuteNonQuery();
                CerrarConexion();
                return true;
            }
            catch (Exception)
            {

                return false;
            }
        }

        /// <summary>
        /// Elimina un recaudo de una inspeccion 
        /// </summary>
        /// <param name="recaudoInspeccion"></param>
        /// <returns></returns>
        public bool EliminarRecaudoInspeccion(RecaudoInspeccion recaudoInspeccion)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "AgregarRecaudoInspeccion";

                comando.Parameters.AddWithValue("@idRecaudoInspeccion", recaudoInspeccion.Id);

                comando.Parameters["@idRecaudoInspeccion"].Direction = ParameterDirection.Input;
                comando.ExecuteNonQuery();
                CerrarConexion();
                return true;

            }
            catch (Exception)
            {

                return false;
            }

        }

        /// <summary>
        /// obtiene todos los recaudos de una inspeccion
        /// </summary>
        /// <param name="inspeccion"></param>
        /// <returns></returns>
        public List<RecaudoInspeccion> ObtenerRecaudosInspeccion(Entidad inspeccion)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                List<RecaudoInspeccion> retorno = new List<RecaudoInspeccion>();

                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ObtenerRecaudosInspeccion";

                comando.Parameters.AddWithValue("@idInspeccion",inspeccion.Id);
                comando.Parameters["@idInspeccion"].Direction = ParameterDirection.Input;
                MySqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    RecaudoInspeccion recaudo = FabricaEntidades.ObtenerRecaudoInspeccion();
                    recaudo.Recaudo.Nombre = (string) reader[0];
                    recaudo.Recaudo.Id = (int) reader[1];
                    recaudo.Id = (int) reader[2];
                    recaudo.FechaSolicitud = (DateTime) reader[5];
                    recaudo.FechaEntregado = (DateTime) reader[6];
                    recaudo.Observacion = (string) reader[7];
                    retorno.Add(recaudo);
                }

                reader.Close();
                CerrarConexion();
                return retorno;
            }
            catch (Exception)
            {

                return null;
            }
        }
    }
}
